#include "admin.h"


//菜单

void admin_menu(void)               //管理员菜单
{
    system("clear");
    puts("*****管理员系统*****");
	puts("1、操作员");
	puts("2、学生");
	puts("3、返回上一级");
}

void admin_manager_menu(void)     //管理员管理操作员菜单
{
    system("clear");
    puts("*****管理操作员系统*****");
	puts("1、增加操作员人员");
	puts("2、开除操作员人员");
	puts("3、修改操作人员密码");
	puts("4、返回上一级");
}

void admin_stu_menu(void)     //管理员管理学生菜单
{
    system("clear");
    puts("*****管理学生系统*****");
	puts("1、增加学生");
	puts("2、删除学生");
	puts("3、修改学生信息");
	puts("4、批量导入");
	puts("5、返回上一级");
}

void admin_stu_change_menu(void)        //管理员选择修改学生信息选项
{
    system("clear");
    puts("*****管理学生系统*****");
	puts("1、修改名字");
	puts("2、修改密码");
	puts("3、返回上一级");
}

//管理员系统
int login_admin(void)  //管理员登录
{
	system("clear");

	printf("请输入管理员名称\n");
	char user[20];
	get_str(user,sizeof(user));
	printf("请输入密码\n");
	char password[20];
	get_passwd(password,sizeof(password));
	if(0 == strcmp(user,"admin") && 0 == strcmp(password,"123456"))
	{
		print_sec("登录成功",0.75);
		return 0;
	}
	print_sec("用户名或密码错误!",0.75);
	return -1;
}

void admin(void) //管理员界面
{
	if(0 != login_admin())
	{
		return ;
	}
    for(;;)
	{

		admin_menu();

		switch(get_cmd('1','3'))
		{
		case '1': register_manager();break;           //管理操作员
		case '2': register_stu(); break;          //管理学生
		case '3': return;
		}
	}
}

//管理操作员界面
void register_manager(void)
{
	for(;;)
	{
		admin_manager_menu();

		switch(get_cmd('1','4'))
		{
		case '1': add_manager();break;          //增加操作员
		case '2': reduce_manager();break;       //删除操作员
		case '3': change_manager();break;       //修改操作员密码
		case '4':return;
		}
	}
}

void add_manager(void)   			//增加操作员
{
    if(cnt_operator >= OPERATOR_MAX)
    {
        print_sec("操作员数量已满，无法添加！",0.75);
		return;
    }
    operator[cnt_operator].id = get_operatorid();//自动获取空余ID函数;
	printf("操作员ID为:%d\n",operator[cnt_operator].id);

    char password[20];
	printf("请输入密码:\n");
	get_passwd(operator[cnt_operator].password,sizeof(operator[cnt_operator].password));
	printf("请再次输入密码:\n");
	get_passwd(password,sizeof(password));
	if(strcmp(operator[cnt_operator].password,password))			
	{
		print_sec("两次密码输入不一,注册失败!",0.75);
		return;
	}

    // 用户数量+1
	cnt_operator++;

	print_sec("注册成功!",0.75);
}

void change_manager(void)
{
	system("clear");
	printf("请输入操作员ID:\n");

	int id;
	scanf("%d",&id);
	getchar();
	int index = query_operatorid(id);
	if(-1 == index)
	{
		print_sec("没有该ID的员工!\n",0.75);
		return;
	}

	printf("请输入操作员密码:\n");
	char password[20];          									  //用于接受修改数据
	get_passwd(password,sizeof(password));
    if(strcmp(operator[index].password,password))                          //密码输入正确
	{
		print_sec("密码输入错误,不能修改!",0.75);
		return;
	}
    printf("请输入要修改的密码\n");
    char password1[20];
	get_passwd(password1,sizeof(password1));
	printf("请再次输入密码:\n");
    char password2[20];
	get_passwd(password2,sizeof(password2));
	if(strcmp(password1,password2))			
	{
		print_sec("两次密码输入不一,注册失败!",0.75);
		return;
	}
    strcpy(operator[index].password,password1);
    print_sec("修改密码成功!\n",1);
}

void reduce_manager(void)   		//选择输入操作员ID来进行删除
{
	system("clear");
	printf("请输入操作员ID:\n");
	int id;
	scanf("%d",&id);
	int index = query_operatorid(id);
	if(-1 == index)
	{
		print_sec("没有该ID的员工!\n",0.75);
		return;
	}
	reduce_operator(index);
}



//管理学生界面
void register_stu(void)
{
    for(;;)
	{
		admin_stu_menu();

		switch(get_cmd('1','5'))
		{
		case '1': add_stu();break;              //增加学生
		case '2': reduce_stu();break;           //删除学生
		case '3': change_stu();break;           //修改学生信息
		case '4': load_stu()  ;break;           //批量导入
        case '5': return;
		}
	}
}

void add_stu(void)
{
    printf("请输入您要添加的学生学号:(7位)\n");
    char id[8];                     //  存储学生ID
    get_str(id,sizeof(id));
    if(7 != strlen(id))
    {
        print_sec("学号输入错误!",0.75);
        return;
    }
    char idfile[12];                //学生ID生成文件
    strcpy(idfile,id);
    strcat(idfile,".txt");
    char path[100] = "/home/coco/图书馆管理系统/stu_data/";          //存储学生信息文件夹
    strcat(path,idfile);
    FILE* rfp = fopen(path,"r");
    if(NULL != rfp)
    {
        fclose(rfp);
        print_sec("该学号已被注册!\n",0.75);
        return;
    }
    printf("请输入学生姓名\n");
    char name[20];
    get_str(name,sizeof(name));
    char password1[20];
	printf("请输入密码:\n");
	get_passwd(password1,sizeof(password1));
    char password2[20];
	printf("请再次输入密码:\n");
	get_passwd(password2,sizeof(password2));
	if(strcmp(password1,password2))			
	{
		print_sec("两次密码输入不一,注册失败!",0.75);
		return;
	}
    
    add_stu_node(name,password1,path);
}

void reduce_stu(void)                           //删除学生
{
    printf("请输入您要删除的学生学号(7位):\n");
    char id[12] ={0};
    get_str(id,sizeof(id));
    if(7 != strlen(id))
    {
        print_sec("位数输入错误!\n",0.75);
        return;
    }
    strcat(id,".txt");
    char path[100] = "/home/coco/图书馆管理系统/stu_data/";
    strcat(path,id);
    FILE* rfp = fopen(path,"r");
    if(NULL == rfp)
    {
        print_sec("没有该学号的学生!\n",0.75);
        return;
    }
    if(0 == remove(path))
    {
        print_sec("删除成功!\n",1);
        return;
    }
    print_sec("删除失败!\n",1);
}

void change_stu(void)                           //修改学生信息
{
    printf("请输入学生学号(7位):\n");
    char id[8] ={0};
    get_str(id,sizeof(id));
    if(7 != strlen(id))
    {
        print_sec("位数输入错误!\n",0.75);
        return;
    }
    Student* stu = read_stu(id);
    if(NULL == stu)
    {
        print_sec("查找失败!\n",0.75);
        return;
    }
    printf("请输入学生密码:\n");
    char password[20];
    get_passwd(password,sizeof(password));
    if(strcmp(password,stu->password))
    {
        print_sec("密码错误!\n",0.75);
        return;
    }
    change_stu_meg(stu);
    write_stu(stu);
}

void change_stu_meg(Student* stu)
{
    for(;;)
	{
		admin_stu_change_menu();
        printf("学号:%s 姓名:%s\n",stu->id,stu->name);
		switch(get_cmd('1','3'))
		{
		case '1': change_stu_name_meg(stu);break;              //增加学生
		case '2': change_stu_password_meg(stu);break;           //删除学生
        case '3': return;
		}
	}
}

void change_stu_name_meg(Student* stu)
{
    printf("请输入要修改的名字\n");
    get_str(stu->name,sizeof(stu->name));
    print_sec("修改成功!\n",0.75);
}

void change_stu_password_meg(Student* stu)
{
    printf("请输入要修改的密码:\n");
    char password1[20];
    get_passwd(password1,sizeof(password1));
    printf("请再次输入密码:\n");
    char password2[20];
    get_passwd(password2,sizeof(password2));
    if(strcmp(password1,password2))
    {
        print_sec("密码输入不一致!\n",0.75);
        return;
    }
    strcpy(stu->password,password1);
    print_sec("修改成功!\n",0.75);
}

void load_stu(void)
{
    printf("请输入导入文件名:\n");
    char filename[20];
    get_str(filename,sizeof(filename));
    FILE* rfp = fopen(filename,"r");
    if(NULL == rfp)
    {
        print_sec("文件打开失败!\n",0.75);
        return;
    }
    char id[20],name[20];
    while(2 == fscanf(rfp,"学号:%s 姓名:%s\n",id,name))
    {
        if(7 != strlen(id))
        {
            printf("学号:%s输入错误!\n",id);
            continue;
        }
        Student* stu = create_node_stu(id,name,"123");
        printf("%s %s\n",stu->id,stu->name);
        write_stu(stu);
        free(stu);
    }
    print_sec("导入完成!\n",0.75);
}